﻿namespace MyEditor;

using System;
using System.Windows.Input;

/// RelayCommand 类实现了 ICommand 接口，用于提供一种简单的方式来创建命令。
/// 这种命令通常用于 MVVM 架构中，将视图中的用户操作绑定到视图模型的命令方法。
public class RelayCommand : ICommand
{
    // 用于存储执行命令的方法
    private readonly Action<object> _execute;
    // 用于判断命令是否可以执行的方法
    private readonly Func<object, bool> _canExecute;

    public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
    {
        _execute = execute;
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter) => _canExecute == null || _canExecute(parameter);
    public void Execute(object parameter) => _execute(parameter);

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
}

